package com.shujia

object Demo11Func1 {
  /**
   * 函数可以在哪里定义？
   * 类中、object中、函数中
   */
  def fun(): Unit = {
    println("fun")
  }

  def main(args: Array[String]): Unit = {


    /**
     * def : 定义函数的关键字
     * func1 : 函数名
     * Unit : 返回值类型 相当于void
     * {} : 函数体
     * 如果需要返回值时 最后一行代码会默认作为返回值
     */
    def func1(): Unit = {
      println("hello " + func2())

      def func2(): String = {
        "world"
      }

    }

    func1()

    println(func2("10"))
    println(func3("10"))
    println(func4("10"))
    println(func5("10"))
    // 如果函数不需要参数 则调用的时候括号可以省略
    println(func6)

  }

  /**
   * 函数的省略
   * 1、return 关键字可以省略 默认最后一行代码作为返回值
   * 2、返回值类型可以省略 可以根据返回值进行推断
   * 3、如果只有一行代码 花括号可以省略
   * 4、如果函数没有参数 括号可以省略
   */

  def func2(str: String): Int = {
    return str.toInt + 100
  }

  // 1、return 关键字可以省略
  def func3(str: String): Int = {
    str.toInt + 100
  }

  // 2、返回值类型可以省略
  def func4(str: String) = {
    str.toInt + 100
  }

  // 3、返回值类型可以省略
  def func5(str: String) = str.toInt + 100

  // 4、返回值类型可以省略
  def func6 = "hello" // 这是一个函数 不是变量！
}
